package com.aol.micro.server.spring.datasource; import javax.annotation.Resource; import javax.sql.DataSource; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import lombok.Builder; import org.apache.commons.dbcp2.BasicDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Builder @Configuration @NoArgsConstructor @AllArgsConstructor public class DBCPDataSourceBuilder { @Resource(name = "mainEnv") private JdbcConfig mainEnv; @Resource(name = "dbcpEnv") private DBCPConfig dbcpEnv; @Bean(destroyMethod = "close", name = "mainDataSource") public DataSource mainDataSource() { return getDataSource(); } private DataSource getDataSource() { BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName(mainEnv.getDriverClassName()); ds.setUrl(mainEnv.getUrl()); ds.setUsername(mainEnv.getUsername()); ds.setPassword(mainEnv.getPassword()); retrySetup(ds); return ds; } private void retrySetup(BasicDataSource ds) { if (!"org.hibernate.dialect.HSQLDialect".equals(mainEnv.getDialect())) { ds.setTestOnBorrow(dbcpEnv.isTestOnBorrow()); ds.setValidationQuery(dbcpEnv.getValidationQuery()); ds.setMaxTotal(dbcpEnv.getMaxTotal()); ds.setMinEvictableIdleTimeMillis(dbcpEnv.getMinEvictableIdleTime()); ds.setTimeBetweenEvictionRunsMillis(dbcpEnv.getTimeBetweenEvictionRuns()); ds.setNumTestsPerEvictionRun(dbcpEnv.getNumTestsPerEvictionRun()); ds.setTestWhileIdle(dbcpEnv.isTestWhileIdle()); ds.setTestOnReturn(dbcpEnv.isTestOnReturn()); } } }